// File generated from our OpenAPI spec by Stainless.

package com.metest.api.services.async.rest

import com.metest.api.core.ClientOptions
import com.metest.api.core.RequestOptions
import com.metest.api.core.http.HttpResponseFor
import com.metest.api.models.rest.actuator.ActuatorBeansParams
import com.metest.api.models.rest.actuator.ActuatorBeansResponse
import com.metest.api.models.rest.actuator.ActuatorConditionsParams
import com.metest.api.models.rest.actuator.ActuatorConditionsResponse
import com.metest.api.models.rest.actuator.ActuatorHealthParams
import com.metest.api.models.rest.actuator.ActuatorHealthResponse
import com.metest.api.models.rest.actuator.ActuatorInfoParams
import com.metest.api.models.rest.actuator.ActuatorInfoResponse
import com.metest.api.models.rest.actuator.ActuatorMappingsParams
import com.metest.api.models.rest.actuator.ActuatorMappingsResponse
import com.metest.api.models.rest.actuator.ActuatorRetrieveParams
import com.metest.api.models.rest.actuator.ActuatorRetrieveResponse
import com.metest.api.models.rest.actuator.ActuatorScheduledtasksParams
import com.metest.api.models.rest.actuator.ActuatorScheduledtasksResponse
import com.metest.api.models.rest.actuator.ActuatorThreaddumpParams
import com.metest.api.models.rest.actuator.ActuatorThreaddumpResponse
import com.metest.api.services.async.rest.actuator.CachServiceAsync
import com.metest.api.services.async.rest.actuator.ConfigpropServiceAsync
import com.metest.api.services.async.rest.actuator.EnvServiceAsync
import com.metest.api.services.async.rest.actuator.LoggerServiceAsync
import com.metest.api.services.async.rest.actuator.MetricServiceAsync
import com.metest.api.services.async.rest.actuator.SbomServiceAsync
import java.util.concurrent.CompletableFuture
import java.util.function.Consumer

interface ActuatorServiceAsync {

    /**
     * Returns a view of this service that provides access to raw HTTP responses for each method.
     */
    fun withRawResponse(): WithRawResponse

    /**
     * Returns a view of this service with the given option modifications applied.
     *
     * The original service is not modified.
     */
    fun withOptions(modifier: Consumer<ClientOptions.Builder>): ActuatorServiceAsync

    fun loggers(): LoggerServiceAsync

    fun sbom(): SbomServiceAsync

    fun metrics(): MetricServiceAsync

    fun env(): EnvServiceAsync

    fun configprops(): ConfigpropServiceAsync

    fun caches(): CachServiceAsync

    /** Actuator root web endpoint */
    fun retrieve(): CompletableFuture<ActuatorRetrieveResponse> =
        retrieve(ActuatorRetrieveParams.none())

    /** @see retrieve */
    fun retrieve(
        params: ActuatorRetrieveParams = ActuatorRetrieveParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): CompletableFuture<ActuatorRetrieveResponse>

    /** @see retrieve */
    fun retrieve(
        params: ActuatorRetrieveParams = ActuatorRetrieveParams.none()
    ): CompletableFuture<ActuatorRetrieveResponse> = retrieve(params, RequestOptions.none())

    /** @see retrieve */
    fun retrieve(requestOptions: RequestOptions): CompletableFuture<ActuatorRetrieveResponse> =
        retrieve(ActuatorRetrieveParams.none(), requestOptions)

    /** Actuator web endpoint 'beans' */
    fun beans(): CompletableFuture<ActuatorBeansResponse> = beans(ActuatorBeansParams.none())

    /** @see beans */
    fun beans(
        params: ActuatorBeansParams = ActuatorBeansParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): CompletableFuture<ActuatorBeansResponse>

    /** @see beans */
    fun beans(
        params: ActuatorBeansParams = ActuatorBeansParams.none()
    ): CompletableFuture<ActuatorBeansResponse> = beans(params, RequestOptions.none())

    /** @see beans */
    fun beans(requestOptions: RequestOptions): CompletableFuture<ActuatorBeansResponse> =
        beans(ActuatorBeansParams.none(), requestOptions)

    /** Actuator web endpoint 'conditions' */
    fun conditions(): CompletableFuture<ActuatorConditionsResponse> =
        conditions(ActuatorConditionsParams.none())

    /** @see conditions */
    fun conditions(
        params: ActuatorConditionsParams = ActuatorConditionsParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): CompletableFuture<ActuatorConditionsResponse>

    /** @see conditions */
    fun conditions(
        params: ActuatorConditionsParams = ActuatorConditionsParams.none()
    ): CompletableFuture<ActuatorConditionsResponse> = conditions(params, RequestOptions.none())

    /** @see conditions */
    fun conditions(requestOptions: RequestOptions): CompletableFuture<ActuatorConditionsResponse> =
        conditions(ActuatorConditionsParams.none(), requestOptions)

    /** Actuator web endpoint 'health' */
    fun health(): CompletableFuture<ActuatorHealthResponse> = health(ActuatorHealthParams.none())

    /** @see health */
    fun health(
        params: ActuatorHealthParams = ActuatorHealthParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): CompletableFuture<ActuatorHealthResponse>

    /** @see health */
    fun health(
        params: ActuatorHealthParams = ActuatorHealthParams.none()
    ): CompletableFuture<ActuatorHealthResponse> = health(params, RequestOptions.none())

    /** @see health */
    fun health(requestOptions: RequestOptions): CompletableFuture<ActuatorHealthResponse> =
        health(ActuatorHealthParams.none(), requestOptions)

    /** Actuator web endpoint 'info' */
    fun info(): CompletableFuture<ActuatorInfoResponse> = info(ActuatorInfoParams.none())

    /** @see info */
    fun info(
        params: ActuatorInfoParams = ActuatorInfoParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): CompletableFuture<ActuatorInfoResponse>

    /** @see info */
    fun info(
        params: ActuatorInfoParams = ActuatorInfoParams.none()
    ): CompletableFuture<ActuatorInfoResponse> = info(params, RequestOptions.none())

    /** @see info */
    fun info(requestOptions: RequestOptions): CompletableFuture<ActuatorInfoResponse> =
        info(ActuatorInfoParams.none(), requestOptions)

    /** Actuator web endpoint 'mappings' */
    fun mappings(): CompletableFuture<ActuatorMappingsResponse> =
        mappings(ActuatorMappingsParams.none())

    /** @see mappings */
    fun mappings(
        params: ActuatorMappingsParams = ActuatorMappingsParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): CompletableFuture<ActuatorMappingsResponse>

    /** @see mappings */
    fun mappings(
        params: ActuatorMappingsParams = ActuatorMappingsParams.none()
    ): CompletableFuture<ActuatorMappingsResponse> = mappings(params, RequestOptions.none())

    /** @see mappings */
    fun mappings(requestOptions: RequestOptions): CompletableFuture<ActuatorMappingsResponse> =
        mappings(ActuatorMappingsParams.none(), requestOptions)

    /** Actuator web endpoint 'scheduledtasks' */
    fun scheduledtasks(): CompletableFuture<ActuatorScheduledtasksResponse> =
        scheduledtasks(ActuatorScheduledtasksParams.none())

    /** @see scheduledtasks */
    fun scheduledtasks(
        params: ActuatorScheduledtasksParams = ActuatorScheduledtasksParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): CompletableFuture<ActuatorScheduledtasksResponse>

    /** @see scheduledtasks */
    fun scheduledtasks(
        params: ActuatorScheduledtasksParams = ActuatorScheduledtasksParams.none()
    ): CompletableFuture<ActuatorScheduledtasksResponse> =
        scheduledtasks(params, RequestOptions.none())

    /** @see scheduledtasks */
    fun scheduledtasks(
        requestOptions: RequestOptions
    ): CompletableFuture<ActuatorScheduledtasksResponse> =
        scheduledtasks(ActuatorScheduledtasksParams.none(), requestOptions)

    /** Actuator web endpoint 'threaddump' */
    fun threaddump(): CompletableFuture<ActuatorThreaddumpResponse> =
        threaddump(ActuatorThreaddumpParams.none())

    /** @see threaddump */
    fun threaddump(
        params: ActuatorThreaddumpParams = ActuatorThreaddumpParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): CompletableFuture<ActuatorThreaddumpResponse>

    /** @see threaddump */
    fun threaddump(
        params: ActuatorThreaddumpParams = ActuatorThreaddumpParams.none()
    ): CompletableFuture<ActuatorThreaddumpResponse> = threaddump(params, RequestOptions.none())

    /** @see threaddump */
    fun threaddump(requestOptions: RequestOptions): CompletableFuture<ActuatorThreaddumpResponse> =
        threaddump(ActuatorThreaddumpParams.none(), requestOptions)

    /**
     * A view of [ActuatorServiceAsync] that provides access to raw HTTP responses for each method.
     */
    interface WithRawResponse {

        /**
         * Returns a view of this service with the given option modifications applied.
         *
         * The original service is not modified.
         */
        fun withOptions(
            modifier: Consumer<ClientOptions.Builder>
        ): ActuatorServiceAsync.WithRawResponse

        fun loggers(): LoggerServiceAsync.WithRawResponse

        fun sbom(): SbomServiceAsync.WithRawResponse

        fun metrics(): MetricServiceAsync.WithRawResponse

        fun env(): EnvServiceAsync.WithRawResponse

        fun configprops(): ConfigpropServiceAsync.WithRawResponse

        fun caches(): CachServiceAsync.WithRawResponse

        /**
         * Returns a raw HTTP response for `get /rest/actuator`, but is otherwise the same as
         * [ActuatorServiceAsync.retrieve].
         */
        fun retrieve(): CompletableFuture<HttpResponseFor<ActuatorRetrieveResponse>> =
            retrieve(ActuatorRetrieveParams.none())

        /** @see retrieve */
        fun retrieve(
            params: ActuatorRetrieveParams = ActuatorRetrieveParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): CompletableFuture<HttpResponseFor<ActuatorRetrieveResponse>>

        /** @see retrieve */
        fun retrieve(
            params: ActuatorRetrieveParams = ActuatorRetrieveParams.none()
        ): CompletableFuture<HttpResponseFor<ActuatorRetrieveResponse>> =
            retrieve(params, RequestOptions.none())

        /** @see retrieve */
        fun retrieve(
            requestOptions: RequestOptions
        ): CompletableFuture<HttpResponseFor<ActuatorRetrieveResponse>> =
            retrieve(ActuatorRetrieveParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/beans`, but is otherwise the same as
         * [ActuatorServiceAsync.beans].
         */
        fun beans(): CompletableFuture<HttpResponseFor<ActuatorBeansResponse>> =
            beans(ActuatorBeansParams.none())

        /** @see beans */
        fun beans(
            params: ActuatorBeansParams = ActuatorBeansParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): CompletableFuture<HttpResponseFor<ActuatorBeansResponse>>

        /** @see beans */
        fun beans(
            params: ActuatorBeansParams = ActuatorBeansParams.none()
        ): CompletableFuture<HttpResponseFor<ActuatorBeansResponse>> =
            beans(params, RequestOptions.none())

        /** @see beans */
        fun beans(
            requestOptions: RequestOptions
        ): CompletableFuture<HttpResponseFor<ActuatorBeansResponse>> =
            beans(ActuatorBeansParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/conditions`, but is otherwise the
         * same as [ActuatorServiceAsync.conditions].
         */
        fun conditions(): CompletableFuture<HttpResponseFor<ActuatorConditionsResponse>> =
            conditions(ActuatorConditionsParams.none())

        /** @see conditions */
        fun conditions(
            params: ActuatorConditionsParams = ActuatorConditionsParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): CompletableFuture<HttpResponseFor<ActuatorConditionsResponse>>

        /** @see conditions */
        fun conditions(
            params: ActuatorConditionsParams = ActuatorConditionsParams.none()
        ): CompletableFuture<HttpResponseFor<ActuatorConditionsResponse>> =
            conditions(params, RequestOptions.none())

        /** @see conditions */
        fun conditions(
            requestOptions: RequestOptions
        ): CompletableFuture<HttpResponseFor<ActuatorConditionsResponse>> =
            conditions(ActuatorConditionsParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/health`, but is otherwise the same as
         * [ActuatorServiceAsync.health].
         */
        fun health(): CompletableFuture<HttpResponseFor<ActuatorHealthResponse>> =
            health(ActuatorHealthParams.none())

        /** @see health */
        fun health(
            params: ActuatorHealthParams = ActuatorHealthParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): CompletableFuture<HttpResponseFor<ActuatorHealthResponse>>

        /** @see health */
        fun health(
            params: ActuatorHealthParams = ActuatorHealthParams.none()
        ): CompletableFuture<HttpResponseFor<ActuatorHealthResponse>> =
            health(params, RequestOptions.none())

        /** @see health */
        fun health(
            requestOptions: RequestOptions
        ): CompletableFuture<HttpResponseFor<ActuatorHealthResponse>> =
            health(ActuatorHealthParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/info`, but is otherwise the same as
         * [ActuatorServiceAsync.info].
         */
        fun info(): CompletableFuture<HttpResponseFor<ActuatorInfoResponse>> =
            info(ActuatorInfoParams.none())

        /** @see info */
        fun info(
            params: ActuatorInfoParams = ActuatorInfoParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): CompletableFuture<HttpResponseFor<ActuatorInfoResponse>>

        /** @see info */
        fun info(
            params: ActuatorInfoParams = ActuatorInfoParams.none()
        ): CompletableFuture<HttpResponseFor<ActuatorInfoResponse>> =
            info(params, RequestOptions.none())

        /** @see info */
        fun info(
            requestOptions: RequestOptions
        ): CompletableFuture<HttpResponseFor<ActuatorInfoResponse>> =
            info(ActuatorInfoParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/mappings`, but is otherwise the same
         * as [ActuatorServiceAsync.mappings].
         */
        fun mappings(): CompletableFuture<HttpResponseFor<ActuatorMappingsResponse>> =
            mappings(ActuatorMappingsParams.none())

        /** @see mappings */
        fun mappings(
            params: ActuatorMappingsParams = ActuatorMappingsParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): CompletableFuture<HttpResponseFor<ActuatorMappingsResponse>>

        /** @see mappings */
        fun mappings(
            params: ActuatorMappingsParams = ActuatorMappingsParams.none()
        ): CompletableFuture<HttpResponseFor<ActuatorMappingsResponse>> =
            mappings(params, RequestOptions.none())

        /** @see mappings */
        fun mappings(
            requestOptions: RequestOptions
        ): CompletableFuture<HttpResponseFor<ActuatorMappingsResponse>> =
            mappings(ActuatorMappingsParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/scheduledtasks`, but is otherwise the
         * same as [ActuatorServiceAsync.scheduledtasks].
         */
        fun scheduledtasks(): CompletableFuture<HttpResponseFor<ActuatorScheduledtasksResponse>> =
            scheduledtasks(ActuatorScheduledtasksParams.none())

        /** @see scheduledtasks */
        fun scheduledtasks(
            params: ActuatorScheduledtasksParams = ActuatorScheduledtasksParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): CompletableFuture<HttpResponseFor<ActuatorScheduledtasksResponse>>

        /** @see scheduledtasks */
        fun scheduledtasks(
            params: ActuatorScheduledtasksParams = ActuatorScheduledtasksParams.none()
        ): CompletableFuture<HttpResponseFor<ActuatorScheduledtasksResponse>> =
            scheduledtasks(params, RequestOptions.none())

        /** @see scheduledtasks */
        fun scheduledtasks(
            requestOptions: RequestOptions
        ): CompletableFuture<HttpResponseFor<ActuatorScheduledtasksResponse>> =
            scheduledtasks(ActuatorScheduledtasksParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/threaddump`, but is otherwise the
         * same as [ActuatorServiceAsync.threaddump].
         */
        fun threaddump(): CompletableFuture<HttpResponseFor<ActuatorThreaddumpResponse>> =
            threaddump(ActuatorThreaddumpParams.none())

        /** @see threaddump */
        fun threaddump(
            params: ActuatorThreaddumpParams = ActuatorThreaddumpParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): CompletableFuture<HttpResponseFor<ActuatorThreaddumpResponse>>

        /** @see threaddump */
        fun threaddump(
            params: ActuatorThreaddumpParams = ActuatorThreaddumpParams.none()
        ): CompletableFuture<HttpResponseFor<ActuatorThreaddumpResponse>> =
            threaddump(params, RequestOptions.none())

        /** @see threaddump */
        fun threaddump(
            requestOptions: RequestOptions
        ): CompletableFuture<HttpResponseFor<ActuatorThreaddumpResponse>> =
            threaddump(ActuatorThreaddumpParams.none(), requestOptions)
    }
}
